Apa Saja Tipe Data yang Tersedia?
Setelah tahu cara mendeklarasikan variabel dan konstanta, sekarang kita lihat tipe data apa saja yang bisa dipakai. Yuk bedah satu per satu.
Unsigned Integer Types
Berikut tipe bilangan bulat tanpa tanda (non-negatif) di Move:
u8: rentang 0..2^8 - 1 (0–255)u16: 0..2^16 - 1u32: 0..2^32 - 1u64: 0..2^64 - 1u128: 0..2^128 - 1u256: 0..2^256 - 1
Contoh pemakaian:
let a : u8 = 100;
let b : u64;
b = 300;
Contoh di dalam module:
module examples::integers {
public struct ExampleObject has key {
id: UID,
a: u8,
b: u16,
}
fun init(a: u8, b: u16, ctx: &mut TxContext) {
let object = ExampleObject {
id: object::new(ctx),
a: a,
b: b,
};
}
}
Boolean
Tipe bool memiliki dua nilai: true dan false.
let a = true;
let b : bool; b = false;
let c : bool = true;
Contoh:
module examples::boolean {
public struct ExampleObject has key {
id: UID,
a: u8,
flag: bool,
}
fun init(a: u8, flag: bool, ctx: &mut TxContext) {
let object = ExampleObject {
id: object::new(ctx),
a: a,
flag: flag,
};
}
}
Vector
vector<T> mirip array dinamis. Import std::vector lalu deklarasikan.
module examples::vectors {
use std::vector;
let v = vector::empty<u8>();
}
Penggunaan umum: vector<u8> (deretan byte) sering dipakai untuk representasi string mentah sebelum dikonversi.
String
Perlu import std::string dan tipe String.
module examples::strings {
use std::string::{Self, String};
public struct ExampleObject has key {
id: UID,
name: String,
}
fun init(name_bytes: vector<u8>, ctx: &mut TxContext) {
let object = ExampleObject {
id: object::new(ctx),
name: string::utf8(name_bytes),
};
}
}
Kita melakukan konversi vector<u8> menjadi String dengan string::utf8().
Address
Alamat ditulis dengan prefiks @.
let addr = @0x2;
Bentuk penulisan singkat dan panjang:
@0x1→0x00000000000000000000000000000001@0x42→0x00000000000000000000000000000042@0xDEADBEEF→0x000000000000000000000000DEADBEEF@0x0000000000000000000000000000000A(bentuk penuh)@stdmenunjuk alamat untukstd
Untuk field atau parameter gunakan tipe address:
module examples::address {
public struct ExampleObject has key {
id: UID,
addr: address,
}
fun init(add: address, ctx: &mut TxContext) {
let object = ExampleObject {
id: object::new(ctx),
addr: add,
};
}
}
Tantangan Kecil
Buat module dengan object Person yang punya field: name, city, age, date_of_birth. Lalu buat conpublic structor yang menginisialisasi satu instance Person.
Penutup
Coba jalankan contoh: buat module examples lalu variasikan sub–kode untuk integers, strings, vectors, dan address. Lalu bangun dengan sui move build. Jika ada error, coba perbaiki.
Integer, boolean, string, vector, dan address adalah tipe dasar yang paling sering dipakai. Selanjutnya kita masuk ke control flow dan cara memakai tipe-tipe ini dalam logika program.